// SmarTest Studio - AI助手类

/**
 * AIAssistant 类 - 管理AI助手面板的所有功能
 */
class AIAssistant {
    constructor(options = {}) {
        // 配置选项
        this.options = {
            inputElement: options.inputElement || null,
            chatElement: options.chatElement || null,
            onMessageSent: options.onMessageSent || null,
            onMessageReceived: options.onMessageReceived || null,
            ...options
        };
        
        // DOM元素
        this.inputElement = this.options.inputElement;
        this.chatElement = this.options.chatElement;
        
        // 消息历史
        this.messageHistory = [];
        
        // 初始化
        this.init();
    }
    
    /**
     * 初始化AI助手
     */
    init() {
        if (!this.inputElement || !this.chatElement) {
            console.warn('AI助手初始化失败：缺少必要的DOM元素');
            return;
        }
        
        this.bindEvents();
        this.loadWelcomeMessage();
    }
    
    /**
     * 绑定事件监听器
     */
    bindEvents() {
        // 输入框回车事件
        this.inputElement.addEventListener('keypress', (e) => {
            if (e.key === 'Enter') {
                this.sendMessage();
            }
        });
        
        // 发送按钮点击事件 - 在AI面板上下文中查找
        const aiPanel = this.inputElement.closest('#ai-panel');
        const sendBtn = aiPanel ? aiPanel.querySelector('.ai-input button') : null;
        if (sendBtn) {
            sendBtn.addEventListener('click', () => this.sendMessage());
        }
    }
    
    /**
     * 加载欢迎消息
     */
    loadWelcomeMessage() {
        const welcomeMessage = {
            type: 'ai',
            content: '您好！我是SmarTest Studio的AI助手，可以帮助您进行自动化测试相关的问题解答和代码生成。请问有什么可以帮助您的吗？',
            timestamp: new Date()
        };
        
        this.addMessage(welcomeMessage);
    }
    
    /**
     * 发送消息
     */
    sendMessage() {
        const message = this.inputElement.value.trim();
        if (!message) return;
        
        // 清空输入框
        this.inputElement.value = '';
        
        // 添加用户消息
        const userMessage = {
            type: 'user',
            content: message,
            timestamp: new Date()
        };
        
        this.addMessage(userMessage);
        
        // 触发消息发送回调
        if (this.options.onMessageSent) {
            this.options.onMessageSent(userMessage);
        }
        
        // 模拟AI回复
        this.simulateAIResponse(message);
    }
    
    /**
     * 添加消息到聊天界面
     * @param {Object} message - 消息对象
     */
    addMessage(message) {
        this.messageHistory.push(message);
        
        const messageElement = this.createMessageElement(message);
        this.chatElement.appendChild(messageElement);
        
        // 滚动到底部
        this.scrollToBottom();
    }
    
    /**
     * 创建消息元素
     * @param {Object} message - 消息对象
     * @returns {HTMLElement} 消息DOM元素
     */
    createMessageElement(message) {
        const messageDiv = document.createElement('div');
        messageDiv.className = `${message.type}-message`;
        
        if (message.type === 'user') {
            messageDiv.innerHTML = `
                <div class="user-avatar"><i class="bi bi-person"></i></div>
                <div class="user-content">${this.escapeHtml(message.content)}</div>
            `;
        } else {
            messageDiv.innerHTML = `
                <div class="ai-avatar"><i class="bi bi-robot"></i></div>
                <div class="ai-content">${this.escapeHtml(message.content)}</div>
            `;
        }
        
        return messageDiv;
    }
    
    /**
     * 模拟AI回复
     * @param {string} userMessage - 用户消息
     */
    simulateAIResponse(userMessage) {
        // 显示正在输入状态
        this.showTypingIndicator();
        
        setTimeout(() => {
            this.hideTypingIndicator();
            
            const aiResponse = this.generateAIResponse(userMessage);
            const aiMessage = {
                type: 'ai',
                content: aiResponse,
                timestamp: new Date()
            };
            
            this.addMessage(aiMessage);
            
            // 触发消息接收回调
            if (this.options.onMessageReceived) {
                this.options.onMessageReceived(aiMessage);
            }
        }, 1000 + Math.random() * 2000); // 1-3秒随机延迟
    }
    
    /**
     * 生成AI回复内容
     * @param {string} userMessage - 用户消息
     * @returns {string} AI回复内容
     */
    generateAIResponse(userMessage) {
        const lowerMessage = userMessage.toLowerCase();
        
        // 简单的关键词匹配回复
        if (lowerMessage.includes('测试') || lowerMessage.includes('test')) {
            return '关于自动化测试，我可以帮您生成测试用例、编写测试脚本或解答测试相关问题。请告诉我您具体需要什么帮助？';
        } else if (lowerMessage.includes('设备') || lowerMessage.includes('device')) {
            return '设备管理是SmarTest Studio的核心功能。您可以连接Android设备进行UI自动化测试。需要我帮您解决设备连接问题吗？';
        } else if (lowerMessage.includes('ui') || lowerMessage.includes('界面')) {
            return 'UI控件树功能可以帮您分析应用界面结构，识别可操作的UI元素。您可以通过右侧面板查看当前页面的UI控件树。';
        } else if (lowerMessage.includes('代码') || lowerMessage.includes('code')) {
            return '我可以帮您生成自动化测试代码，包括点击、输入、滑动等操作。请描述您想要实现的测试场景。';
        } else if (lowerMessage.includes('帮助') || lowerMessage.includes('help')) {
            return '我可以协助您：\n1. 生成自动化测试代码\n2. 解答测试相关问题\n3. 分析UI控件结构\n4. 设备连接和管理\n5. 测试用例设计\n\n请告诉我您需要哪方面的帮助？';
        } else {
            return `我已收到您的问题："${userMessage}"。作为SmarTest Studio的AI助手，我正在分析您的需求。请提供更多详细信息，以便我为您提供更准确的帮助。`;
        }
    }
    
    /**
     * 显示正在输入指示器
     */
    showTypingIndicator() {
        const typingDiv = document.createElement('div');
        typingDiv.className = 'ai-message typing-indicator';
        typingDiv.innerHTML = `
            <div class="ai-avatar"><i class="bi bi-robot"></i></div>
            <div class="ai-content">
                <div class="typing-dots">
                    <span></span>
                    <span></span>
                    <span></span>
                </div>
                正在思考中...
            </div>
        `;
        
        this.chatElement.appendChild(typingDiv);
        this.scrollToBottom();
    }
    
    /**
     * 隐藏正在输入指示器
     */
    hideTypingIndicator() {
        const typingIndicator = this.chatElement.querySelector('.typing-indicator');
        if (typingIndicator) {
            typingIndicator.remove();
        }
    }
    
    /**
     * 滚动到底部
     */
    scrollToBottom() {
        this.chatElement.scrollTop = this.chatElement.scrollHeight;
    }
    
    /**
     * 清空聊天记录
     */
    clearChat() {
        this.chatElement.innerHTML = '';
        this.messageHistory = [];
        this.loadWelcomeMessage();
    }
    
    /**
     * 获取消息历史
     * @returns {Array} 消息历史数组
     */
    getMessageHistory() {
        return [...this.messageHistory];
    }
    
    /**
     * 设置AI回复模式
     * @param {string} mode - 回复模式 ('simple', 'detailed', 'code')
     */
    setResponseMode(mode) {
        this.responseMode = mode;
    }
    
    /**
     * 转义HTML字符
     * @param {string} text - 要转义的文本
     * @returns {string} 转义后的文本
     */
    escapeHtml(text) {
        const div = document.createElement('div');
        div.textContent = text;
        return div.innerHTML;
    }
    
    /**
     * 销毁AI助手实例
     */
    destroy() {
        // 移除事件监听器
        if (this.inputElement) {
            this.inputElement.removeEventListener('keypress', this.sendMessage);
        }
        
        // 清空引用
        this.inputElement = null;
        this.chatElement = null;
        this.messageHistory = [];
        this.options = null;
    }
}

// 导出类供其他模块使用
if (typeof module !== 'undefined' && module.exports) {
    module.exports = AIAssistant;
}